home *** CD-ROM | disk | FTP | other *** search
/ Mac Mania 5 / MacMania 5.toast / / Internet software / NewsWatcher / NW Source / Source / glob.h < prev    next >
Text File  |  1996-11-21  |  37KB  |  900 lines

  1. /*----------------------------------------------------------------------------
  2.  
  3.     glob.h
  4.  
  5.     This file contains global constant, type, and variable definitions.
  6.     
  7.     Copyright © 1994-1995, Northwestern University.
  8.  
  9. ----------------------------------------------------------------------------*/
  10.  
  11. #include <Aliases.h>
  12.  
  13. #include "def.h"
  14. #include "arrowpair.h"
  15.  
  16. #ifndef __BIGLIST__
  17. #include "biglist.h"
  18. #endif
  19.  
  20.  
  21.  
  22. /* Constants. */
  23.  
  24. /*#define kDevelopmentVersion    1*/            /* comment out this line for the release version */
  25.  
  26. #define kLDEFProc            128            /* resource id of our custom LDEF */
  27.  
  28. #define kTextMargin            4            /* pixel margin for all text windows */
  29.  
  30. #define kNewsWatcherSignature            'NNTP'        /* NewsWatcher's signature */
  31. #define kSavedUserGroupListFileType        'NEWS'        /* user group list file type */
  32. #define kSavedMessageFileType            'TEXT'        /* saved message file type */
  33. #define kPrefsFileType                    'PREF'        /* preferences file type */
  34.  
  35. #define kOpenTypeList        "NEWSTEXT"    /* list of file types we can open */
  36. #define kNumOpenTypeList    2            /* number of file types we can open */
  37.  
  38. #define kuuUndoCreatorType                'uuUN'
  39. #define kExpanderCreatorType            'SITx'
  40.  
  41. #define kGetURLEventClass                'GURL'
  42. #define kGetURLEventID                    'GURL'
  43. #define kGetURLToFileKeyword            'dest'
  44.  
  45. #define kMaxSchemeNameLen                31            /* max length of scheme name */
  46.  
  47. #define kMaxMaxFetch                    999999        /* max value for "max articles to fetch" pref */
  48.  
  49. #define kErrorMessageWithQuitButtonDlg            168
  50.  
  51.  
  52. /* Strings in STR# id=128 resource. */
  53.  
  54. #define kStringResourceID        128
  55.  
  56. #define kStrVersion                                1
  57. #define kStrTabStops                            2
  58. #define kStrAboutWindTitle                        3
  59. #define kStrServerInfoWindTitle                    4
  60. #define kStrMemoryLow                            5
  61. #define kStrCancelingNofMStatusMsg                6
  62. #define kStrSectionMessageFormat                7
  63. #define kStrNoneOpened                            8
  64. #define kStrSomeNotOpened                        9
  65. #define kStrNoRefs                                10
  66. #define kStrPrefsFileName                        11
  67. #define kStrArticleNotFound                        12
  68. #define kStrFrom                                13
  69. #define kStrOrg                                    14
  70. #define kStrDate                                15
  71. #define kStrNewsgroups                            16
  72. #define kStrArticleXofY                            17
  73. #define kStrCancelingStatusMsg                    18
  74. #define kStrNotCanceled                            19
  75. #define kStrNoMsgID                                20
  76. #define kStrDuplicateCopiesOfHelper                21
  77. #define kStrMustRestartIC                        22
  78. #define kStrCantFindURLHelper                    23
  79. #define kStrOutOfMemory                            24
  80. #define kStrAuthFailed                            25
  81. #define kStrOpeningOTStatusMsg                    26
  82. #define kStrSortingStatusMsg                    27
  83. #define kStrReadingStatusMsg                    28
  84. #define kStrCheckingNewStatusMsg                29
  85. #define kStrCheckingDelStatusMsg                30
  86. #define kStrScrapTooBig                            31
  87. #define kStrNoDelGroups                            32
  88. #define kStrGetFullStatusMsg                    33
  89. #define kStrNewGroups                            34
  90. #define kStrFullGroupList                        35
  91. #define kStrSelGroupNoUnread                    36
  92. #define kStrSelGroupNoArt                        37
  93. #define kStrNoneUnread                            38
  94. #define kStrNoArts                                39
  95. #define kStrUntitled                            40
  96. #define kStrOneGroup                            41
  97. #define kStrNGroups                                42
  98. #define kStrShowFullGroupList                    43
  99. #define kStrHideFullGroupList                    44
  100. #define kStrShowHeader                            45
  101. #define kStrHideHeader                            46
  102. #define kStrQuoteStr1                            47
  103. #define kStrQuoteStr2                            48
  104. #define kStrQuoteStr3                            49
  105. #define kStrByWayOfFmt                            50
  106. #define kStrNoSubject                            51
  107. #define kStrOneNotCanceled                        52
  108. #define kStrTo                                    53
  109. #define kStrSubject                                54
  110. #define kStrCc                                    55
  111. #define kStrBcc                                    56
  112. #define kStrReplyto                                57
  113. #define kStrFollowupto                            58
  114. #define kStrKeywords                            59
  115. #define kStrDistribution                        60
  116. #define kStrExtraNewsHeaderLines                61
  117. #define kStrExtraMailHeaderLines                62
  118. #define kStrSignature                            63
  119. #define kStrPostOKMailErr                        64
  120. #define kStrTooManyGroups                        65
  121. #define kStrTrunc                                66
  122. #define kStrURLHelperNotFound                    67
  123. #define kStrURLHelperNoMem                        68
  124. #define kStrScrapTooBigMaxIs32767                69
  125. #define kStrNoMoreChars                            70
  126. #define kStrChecking                            71
  127. #define kStrOpeningConnectionStatusMsg            72    
  128. #define kStrServerInfoFmt                        73
  129. #define kStrURLHelperUnexpectedErr                74
  130. #define kStrSyntaxErr                            75
  131. #define kStrNotInFullGroupList                    76    
  132. #define kStrGroupDeletedOnServer                77
  133. #define kStrMissingGroupName                    78
  134. #define kStrCheckingForNewArticlesStatusMsg        79
  135. #define kStrQuoteString                            80
  136. #define kStrDirFull                                81
  137. #define kStrGettingGroupListFromHostStatusMsg    82
  138. #define kStrGetFromHostWindowTitle                83
  139. #define kStrNoneCanceled                        84
  140. #define kStrSaveGroupListAs                        85
  141. #define kStrSendingGroupListToHostStatusMsg        86
  142. #define kStrSizeofTPrefRecBadFmt                87
  143. #define kStrOpeningMacTCPStatusMsg                88
  144. #define kStrCouldNotOpenMacTCP                    89
  145. #define kStrStartupError                        90
  146. #define kStrOldPrefsFileName                    91
  147. #define kStrReallyOldPrefsFileName                92
  148. #define kStrDiskFull                            93
  149. #define kStrPersonalNWFolder                    94
  150. #define kStrCantFindDefaultURLHelper            95
  151. #define kStrUnexpectedErr                        96
  152. #define kStrDefaultTextFileOwner                97
  153. #define kStrDefaultNewsrcFileName                98
  154. #define kStrPrintingSample                        99
  155. #define kStrGroupSubjectSample                    100    
  156. #define kStrArtMsgSample                        101    
  157. #define kStrMustRestart                            102    
  158. #define kStrPrintNoPagesInRange                    103
  159. #define kStrSaveArticlePrompt                    104    
  160. #define kStrSaveMessagePrompt                    105
  161. #define kStrDiskIOErr                            106
  162. #define kStrDefaultSearchHdr                    107
  163. #define kStrSearchingStatusMsg                    108
  164. #define kStrNoMatches                            109
  165. #define kStrSearchWindowTitle                    110
  166. #define kStrMustCheckAnIcon                        111
  167. #define kStrMustSupplySubject                    112
  168. #define kStrMustSupplyNewsgroup                    113
  169. #define kStrMustSupplyRecipient                    114
  170. #define kStrPostingMessageStatusMsg                115
  171. #define kStrMailingMessageStatusMsg                116
  172. #define kStrFolderSelectNothing                    117
  173. #define kStrFolderSelectFmt                        118
  174. #define kStrStatusWindowTitle                    119    
  175. #define kStrHelperTooOld                        120
  176. #define kStrStatusCancelButtonName                121
  177. #define kStrLogFileName                            122
  178. #define kStrGettingSubjectsAndAuthorsStatusMsg    123
  179. #define kStrGetSubjectsStatusMsg                124
  180. #define kStrSelArticleDoesntExist                125
  181. #define kStrNoneExist                            126
  182. #define kStrSomeDontExist                        127
  183. #define kStrOneArt                                128
  184. #define kStrNArts                                129
  185. #define kStrSomeGroupsNotInFullGroupList        130
  186. #define kStrDragTextTooBig                        131
  187. #define kStrDragTextBadChar                        132
  188. #define kStrDamagedCache                        133
  189. #define kStrFileLockedOrBusy                    134
  190. #define kStrLogOpenMsg                            135
  191. #define kStrNewsWatcherVersion                    136
  192. #define kStrLogLegend                            137
  193. #define kStrLogCantOpen                            138
  194. #define kStrLogClosed                            139
  195. #define kStrScrapBadChar                        140
  196. #define kStrNoMoreTyping                        141
  197. #define kStrDelGroupsWindTitle                    142
  198. #define kStrNews                                143
  199. #define kStrMail                                144
  200. #define kStrFTP                                    145
  201. #define kStrVolLocked                            146
  202. #define kStrNNotCanceled                        147
  203. #define kStrNewsWatcher                            148
  204. #define kStrGettingAndSavingArticle                149
  205. #define kStrGettingAndSavingArticleNofM            150
  206. #define kStrDefaultArtFoldNotFound                151
  207. #define kStrDefaultMsgFoldNotFound                152
  208. #define kStrMessageBodyTruncated                153
  209. #define kStrMessageFieldTruncated                154
  210. #define kStrHqxDecodeHelperName                    155
  211. #define kStrDownloadFoldNotFound                156
  212. #define kStrDownloadTempFilePrefix                157
  213. #define kStrDownloadTempFilePrompt                158
  214. #define kStrGettingAndSavingFile                159
  215. #define kStrGettingAndSavingPartNofM            160
  216. #define kStrCantFindDecodeHelper                161
  217. #define kStrDecodeHelperNoMem                    162
  218. #define kStrDecodeHelperUnexpectedErr            163
  219. #define kStrDecodePartsMissing                    164
  220. #define kStrGettingAndSavingArtAofBPartNofM        165
  221. #define kStrArtHasNoAttachedFile                166
  222. #define kStrAllSelectedArtsHaveMissingParts        167
  223. #define kStrOneArtSkippedNoAttachedFile            168
  224. #define kStrNArtsSkippedNoAttachedFile            169
  225. #define kStrOneArtSkippedMissingParts            170
  226. #define kStrNArtsSkippedMissingParts            171
  227. #define kStrExtractBinariesManuallyDlgLabel        172
  228. #define kStrBody                                173
  229. #define kStrTempFileName                        174
  230. #define kStrBadScrapData                        175
  231. #define kStrDuplicateGroups                        176
  232. #define kStrOneDuplicateGroup                    177
  233. #define kStrMoving                                178
  234. #define kStrPasting                                179
  235. #define kStrDragTextTooBigMaxIs32767            180
  236. #define kStrGroupDragTooBigMaxIs32767            181
  237. #define kStrDiskWriteProtected                    182
  238. #define kStrArtNotOnServer                        183
  239. #define kStrOneArtSkippedNotOnServer            184
  240. #define kStrNArtsSkippedNotOnServer                185
  241. #define kStrUUDecodeHelperName                    186
  242. #define kStrPrinting                            187
  243. #define kStrGettingAndPrinting                    188
  244. #define kStrGettingAndPrintingNofM                189
  245. #define kStrPrintedFor                            190
  246. #define kStrSaveFileAsPrompt                    191
  247. #define kStrNoNewsgroupsHeader                    192
  248. #define kStrBadPrefs                            193
  249. #define kStrDamagedPrefsFileName                194
  250. #define kStrPrintNoDriver                        195
  251. #define kStrNoPrinterSelected                    196
  252. #define kStrNntpURLSyntaxError                    197
  253. #define kStrAddingInitialSubscribedGroups        198
  254. #define kStrFloppyLocked                        199
  255. #define kStrFloppyEraseFailed                    200
  256. #define kStrCouldNotOpenOT                        201
  257. #define kStrArticleOrGroupNotFound                202
  258. #define kStrURLSyntaxError                        203
  259. #define kStrNotAnApplication                    204
  260. #define kStrDesktopDatabaseDamaged                205
  261. #define kStrMustSupplyBody                        206
  262. #define kStrOnlyQuotedText                        207
  263. #define kStrBadEmailAddress                        208
  264. #define kStrCopyAlsoPostedTo                    209
  265. #define kStrNewsIconLabel                        210
  266. #define kStrMailIconLabel                        211
  267. #define kStrSelfIconLabel                        212
  268. #define kStrCantRedefineBuiltinURLs                213
  269. #define kStrURLSchemeAlreadyDefined                214
  270. #define kStrBadURLHelperPrefs                    215
  271. #define kStrAvailableMemoryFmt                    216
  272.  
  273.  
  274.  
  275. /* Types. */
  276.  
  277. typedef enum TWindowKind {
  278.     kGroup,                        /* group list window */
  279.     kSubject,                    /* subject list window */
  280.     kArticle,                    /* article window */
  281.     kMessage,                    /* message window */
  282.     kText,                        /* text window */
  283.     kHelp,                        /* help window */
  284.     kStatus,                    /* status window */
  285.     kDialog,                    /* dialog window */
  286.     kDummy,                        /* dummy window */
  287.     kNotOurWind                    /* no window, or DA window */
  288. } TWindowKind;
  289.  
  290. #define kNumWindowKind kNotOurWind    /* number of window kinds */
  291.  
  292. typedef enum TGroupWindowKind {
  293.     kFullGroup,                    /* full group list window */
  294.     kNewGroup,                    /* new groups list window */
  295.     kUserGroup                    /* user group list window */
  296. } TGroupWindowKind;
  297.  
  298. typedef enum TAttachedFileKind {
  299.     kNoAttachedFile,            /* no attached file */
  300.     kArtNotOnServer,            /* article or part no longer on server */
  301.     kBinHex,                    /* BinHex */
  302.     kUUEncode                    /* uuencode */
  303. } TAttachedFileKind;
  304.  
  305. typedef char TURLSchemeName[kMaxSchemeNameLen+1];
  306.  
  307. typedef struct TOldURLHelperInfo {        /* for pre-version 2.0b25 prefs files */
  308.     OSType sig;                            /* signature of helper program */
  309.     unsigned long versionNumber;        /* version number */
  310.     unsigned long lastMod;                /* last mod date/time */
  311. } TOldURLHelperInfo;
  312.  
  313. typedef struct TURLHelperInfo {
  314.     TURLSchemeName schemeName;            /* scheme name */
  315.     OSType sig;                            /* signature of helper program */
  316.     unsigned long versionNumber;        /* version number */
  317.     unsigned long lastMod;                /* last mod date/time */
  318. } TURLHelperInfo;
  319.  
  320. typedef struct TDispatch {
  321.     void (*activate)(WindowPtr wind, Boolean act);
  322.     void (*update)(WindowPtr wind);
  323.     OSErr (*mouse)(WindowPtr wind, Point where, short modifiers);
  324.     Boolean (*draggable)(WindowPtr wind, Point where, short modifiers);
  325.     OSErr (*key)(WindowPtr wind, unsigned char theChar, unsigned char theKey, short modifiers);
  326.     OSErr (*grow)(WindowPtr wind, Point where);
  327.     OSErr (*zoom)(WindowPtr wind, short zoomDir);
  328.     OSErr (*command)(WindowPtr wind, short menu, short item, short modifiers);
  329.     OSErr (*close)(WindowPtr wind);
  330.     void (*idle)(WindowPtr wind, RgnHandle cursorRgn);
  331.     void (*help)(WindowPtr wind, Point where);
  332. } TDispatch;
  333.  
  334. typedef enum TMsgFieldLabelKind {
  335.     kNoMsgFieldLabel,            /* no message window label for this field */
  336.     kMsgFieldLabelLeft,            /* message window field has label on left */
  337.     kMsgFieldLabelTop            /* message window field has label on top in italics */
  338. } TMsgFieldLabelKind;
  339.  
  340. typedef struct THeader {
  341.     long number;                /* article number */
  342.     long offset;                /* offset in strings of header text */
  343. } THeader;
  344.  
  345. typedef struct TUnread {
  346.     long firstUnread;            /* first unread message */
  347.     long lastUnread;            /* last unread message */
  348.     struct TUnread **next;        /* handle to next entry in list */
  349. } TUnread;
  350.  
  351. typedef struct TGroup {
  352.     long nameOffset;            /* offset in gGroupNames of group name string */
  353.     long firstMess;                /* # of first msg in group */
  354.     long lastMess;                /* # of last msg in group */
  355.     TUnread **unread;            /* handle to list of unread messages for group */
  356.     long numUnread;                /* number of unread articles in group */
  357.     char status;                /* a general purpose status "marker" used in
  358.                                    several contexts */
  359. } TGroup;
  360.  
  361. typedef struct TSubject {
  362.     long subjectOffset;            /* offset in strings block of subject string */
  363.     long authorOffset;            /* offset in strings block of author string */
  364.     long number;                /* article number */
  365.     long threadHeadIndex;        /* index of first article in thread in
  366.                                    subject array. */
  367.     long threadOrdinal;            /* article ordinal in thread (1,2,3,...) */
  368.     long threadLength;            /* total number of articles in thread */
  369.     long nextInThread;            /* index in subject array of next subject 
  370.                                    in this thread, or -1 if none. */
  371.     long partNum;                /* part number, or kMaxLong if not a part */
  372.     long numParts;                /* number of parts, or kMaxLong if not a part */
  373.     Boolean collapsed;            /* true if thread collapsed */
  374.     Boolean read;                /* true if article has been read */
  375.     Boolean incomplete;            /* true if incomplete part of multiple part article */
  376.     Boolean complete;            /* true if part of multiple part article and thread
  377.                                    is now complete (contains all parts, and at least
  378.                                    one part from cache) */
  379.     Boolean inList;                /* true if part of subject window list */
  380. } TSubject;
  381.  
  382. typedef struct TChild {
  383.     WindowPtr childWindow;        /* pointer to child window */
  384.     struct TChild **next;        /* handle to next entry in list */
  385. } TChild;
  386.  
  387. typedef struct TMsgFieldInfo {
  388.     TEHandle edit;                    /* handle to TextEdit record for field */
  389.     short top;                        /* top coord of field */
  390.     short bottom;                    /* bottom coord of field */
  391.     short nLines;                    /* number of TextEdit lines in field */
  392.     Boolean sepLine;                /* true if field preceded by gray separator line */
  393.     TMsgFieldLabelKind labelKind;    /* kind of label for this field */
  394.     unsigned char label[60];        /* P-format field label, if any */
  395. } TMsgFieldInfo;
  396.  
  397. typedef struct TDialogItemInfo {
  398.     Boolean validChars[256];        /* set of valid printable chars in field */
  399.     Boolean numeric;                /* true if numeric field */
  400.     Boolean returnIsLegal;            /* true if CR is legal in field */
  401.     short popupTypeinItem;            /* item number of partner typein field for popup item,
  402.                                        or 0 if none */
  403.     char keyEquivalent;                /* command key equivalent for button, or 0 if none */
  404.     short maxLength;                /* max length of field */
  405.     char *password;                    /* pointer to password if password field, or nil */
  406.     Boolean readOnly;                /* true if read only scrolling field */
  407.     TEHandle theTE;                    /* textedit handle for scrolling field, or nil
  408.                                        if none */
  409.     ControlHandle vScroll;            /* handle to vertical scroll bar control if scrolling
  410.                                        field, or nil if none */
  411. } TDialogItemInfo;
  412.  
  413. #pragma options align=mac68k
  414. typedef struct TSavedWindPos {
  415.     Boolean valid;                    /* true if valid, else use default pos */
  416.     Boolean zoomed;                    /* true if window zoomed */
  417.     Boolean oldFormat;                /* true if old format (pre-2.0b4): 
  418.                                        userState.topLeft valid,
  419.                                        all other fields not used */
  420.     Rect userState;                    /* saved window user state */
  421. } TSavedWindPos;
  422. #pragma options align=reset
  423.  
  424. typedef struct TWindow {
  425.  
  426.     /* Fields used by all kinds of windows. */
  427.  
  428.     TWindowKind kind;            /* kind of window */
  429.     Boolean windPosValid;        /* true if window position should be saved
  430.                                    and restored */
  431.     Boolean movedSinceLastSave;    /* true if window has been moved or resized
  432.                                    or zoomed since the last time its position
  433.                                    was saved on the document file */
  434.     
  435.     /* Fields used only by group, subject, article, message, and text windows */
  436.  
  437.     short panelHeight;            /* height of panel area */
  438.     FontInfo fontInfo;            /* font info */
  439.     short lineHeight;            /* font line height (ascent + descent + leading) */
  440.     
  441.     /* Fields used only by group, subject, article, message, help, and text windows */
  442.     
  443.     ControlHandle vScroll;        /* handle to vertical scroll bar */
  444.     
  445.     /* Fields used only by group windows. */
  446.     
  447.     BigListRef groupList;        /* list ref */
  448.     TGroupWindowKind groupKind;    /* kind of group window */
  449.     long numGroups;                /* number of groups */
  450.     
  451.     /* Fields used only by article and subject windows. */
  452.  
  453.     WindowPtr parentWindow;        /* pointer to parent window */
  454.     Boolean windPosLocked;        /* true if window position is locked */
  455.     
  456.     /* Fields used only by group and subject windows. */
  457.     
  458.     TChild **childList;            /* handle to linked list of child windows */
  459.     
  460.     /* Fields used only by user group and message windows */
  461.     
  462.     Boolean changed;            /* true if window contents changed */
  463.     AliasHandle alias;            /* handle to alias for saved file if saved, else nil */
  464.     
  465.     /* Fields used only by article, message, and text windows. */
  466.     
  467.     TEHandle theTE;                /* TextEdit handle */
  468.     
  469.     /* Fields used only by article and message windows. */
  470.     
  471.     Boolean showDetails;        /* true if details shown */
  472.     
  473.     /* Fields used only by help windows. */
  474.     
  475.     short pictResID;            /* 'PICT' resource id for window */
  476.     ArrowPairRef helpArrowPair;    /* arrow pair reference */
  477.     
  478.     /* Fields used only by full group and new group windows. */
  479.     
  480.     long **groupNameOffsets;    /* handle to array of offsets into gGroupNames */
  481.     
  482.     /* Fields used only by user group windows. */
  483.     
  484.     TGroup **groupArray;        /* handle to group array */
  485.     Handle unsubscribed;        /* handle to list of unsubscribed groups */
  486.     Boolean autoFetched;        /* true if autofetched from host */
  487.     short groupNameHCoord;        /* h coord of group name */
  488.     short numUnreadHCoord;        /* h coord of num unread articles */
  489.     Boolean okToCloseIfChanged;    /* true if ok to close window with changes without saving */
  490.     
  491.     /* Fields used only by subject windows. */
  492.     
  493.     BigListRef subjectList;        /* list handle */
  494.     TSubject **subjectArray;    /* handle to subject array  */
  495.     long numSubjects;            /* number of subjects in array */
  496.     long numSubjectsInList;        /* number of subjects in list */
  497.     Handle strings;                /* handle to subject and author strings */
  498.     short maxSubjectWidth;        /* width in pixels of longest subject line, or 
  499.                                    0 if not yet computed */
  500.     long firstFetched;            /* article number of first article fetched */
  501.     long groupNameOffset;        /* offset in gGroupNames of group name */
  502.     long parentGroup;            /* index in groupArray or groupNameOffsets of parent group window */
  503.     Boolean authorsShown;        /* true if authors shown */
  504.     short minusSignHCoord;        /* h coord of minus sign */
  505.     short threadCountHCoord;    /* h coord of thread count */
  506.     short checkHCoord;            /* h coord of check mark */
  507.     short authorHCoord;            /* h coord of author */
  508.     short authorWidth;            /* width of author field */
  509.     short subjectHCoord;        /* h coord of subject */
  510.     long autoExpandedThread;    /* index in subject array of first article in thread
  511.                                    which was most recently autoexpanded by a Find or
  512.                                    Find Next command, or -1 if none */
  513.     PolyHandle expandTriangle;    /* handle to expanded triangle polygon */
  514.     PolyHandle collapseTriangle;/* handle to collapsed triangle polygon */
  515.     long **sortByNumber;        /* handle to array of offsets to elements of subject
  516.                                    array sorted by article number */
  517.     
  518.     /* Fields used only by article windows. */
  519.     
  520.     Handle fullText;            /* handle to full article text */
  521.     short maxBodyLineWidth;        /* width in pixels of longest body line, truncated
  522.                                    to 80 * max char width, or 0 if not yet computed */
  523.     short numBodyLines;            /* number of lines in body, or 0 if maxLineWidth = 0 */
  524.     short numSections;            /* number of sections */
  525.     short curSection;            /* current section */
  526.     long **sectionBreaks;        /* handle to array of section breaks, or nil
  527.                                    if none */
  528.     Handle msgId;                /* handle to msgId if opened by id, or nil */
  529.     long parentSubject;            /* index in subjectArray of parent subject window */
  530.     ControlHandle hScroll;        /* handle to horizontal scroll bar, or nil if none */
  531.     Boolean attachedFile;        /* true if article has an attached file */
  532.     Boolean showFollowupTo;        /* true to display Followup-To header in panel area */
  533.     Boolean showReplyTo;        /* true to display Reply-To header in panel area */
  534.     ArrowPairRef sectionArrowPair;    /* section arrow pair reference */
  535.     ArrowPairRef nextPrevArrowPair;    /* next/prev arrow pair reference */
  536.     short threadInfoWidth;        /* width of "Article x of y" message in panel area */
  537.     Handle groupName;            /* handle to group name, or nil if opened by id */
  538.     long number;                /* article number if not opened by id */
  539.     Boolean flagReqd;            /* true if when fetched from server BinHex or uuencode
  540.                                    text was required to have a special "begin" flag line */
  541.     
  542.     /* Fields used only by message windows. */
  543.     
  544.     Boolean newsIcon;            /* true if news icon checked */
  545.     Boolean mailIcon;            /* true if mail icon checked */
  546.     Boolean selfIcon;            /* true if self icon checked */
  547.     ControlHandle sendButton;    /* handle to "Send" button control */
  548.     ControlHandle tabCheckbox;    /* handle to tab stops checkbox control */
  549.     ControlHandle wrapCheckbox;    /* handle to wrap checkbox control */
  550.     TEHandle tabField;            /* handle to tab stops field */
  551.     TEHandle quoteStringField;    /* handle to quote string field */
  552.     TEHandle newsgroupsField;    /* handle to "Newsgroups" field */
  553.     TEHandle toField;            /* handle to "To" field */
  554.     TEHandle subjectField;        /* handle to "Subject" field */
  555.     TEHandle ccField;            /* handle to "Cc" field */
  556.     TEHandle bccField;            /* handle to "Bcc" field */
  557.     TEHandle replytoField;        /* handle to "Reply-To" field */
  558.     TEHandle followuptoField;    /* handle to "Followup-To" field */
  559.     TEHandle keywordsField;        /* handle to "Keywords" field */
  560.     TEHandle distributionField;    /* handle to "Distribution" field */
  561.     TEHandle extraNewsField;    /* handle to extra news header lines field */
  562.     TEHandle extraMailField;    /* handle to extra mail header lines field */
  563.     TEHandle signatureField;    /* handle to signature field */
  564.     Handle references;            /* handle to "References" header contents */
  565.     Handle from;                /* handle to "From" header contents for redirected mail msg */
  566.     TMsgFieldInfo **fields;        /* handle to array of field info */
  567.     short numFields;            /* number of fields */
  568.     short firstScrollingField;    /* index if fields array of first scrolling field */
  569.     short curField;                /* index in fields array of current field */
  570.     short labelRight;            /* right coord of header field labels */
  571.     Boolean tabEnabled;            /* true if body tabs currently enabled for this window */
  572.     Boolean wrapOnSend;            /* true to wrap message before sending it */
  573.     short tabStops;                /* current tab stops for this window */
  574.     Boolean showLabels;            /* true to show labels under 3 icons in panel area */
  575.     short iconPanelHeight;        /* heigth of icon panel */
  576.     short optionsPanelHeight;    /* height of options panel */
  577.     Boolean isFollowup;            /* true if message is a followup */
  578.     
  579.     /* Fields used only by dialog windows. */
  580.     
  581.     Boolean movableModal;        /* true if dialog is movable modal */
  582.     short defaultItem;            /* item number of default button, or 0 if none */
  583.     Boolean defaultOutline;        /* true if default button outlined */
  584.     short cancelItem;            /* item number of cancel button, or 0 if none */
  585.     short curItem;                /* item number of currently active scrolling text field,
  586.                                    or 0 if none */
  587.     TDialogItemInfo    **itemInfo;    /* handle to array of item information */
  588.                                    
  589.     /* Fields used only by text windows. */
  590.     
  591.     void (*drawPanel)(WindowPtr);    /* pointer to panel drawing function, or nil if none */
  592.     
  593. } TWindow;
  594.  
  595. #pragma options align=mac68k
  596. typedef struct TPrefRec {
  597.  
  598.     /* Original 1.0.2 prefs. */
  599.  
  600.     Str255 newsServerName;            /* name of news server */
  601.     Str255 textFont;                /* name of textedit font */
  602.     short textSize;                    /* size of textedit font */
  603.     Str255 listFont;                /* name of list font */
  604.     short listSize;                    /* size of list font */
  605.     Point fullGroupWindowLocn;        /* saved top left full group window position
  606.                                        (defunct as of 2.0b4) */
  607.     Point unused0;                    /* unused (used to be bot right saved full group window pos */
  608.     Point unused1;                    /* unused (used to be stagerring offset) */
  609.     Point statusWindowLocn;            /* saved top left status window position */
  610.     short oldMaxFetch;                /* old max. number of articles to fetch 
  611.                                        (defunct as of 2.1b1) */
  612.     CStr255 ftpNewsrcUsername;        /* username for FTP transfers of newsrc files */
  613.     CStr255 ftpNewsrcHost;            /* host name for FTP transfers of newsrc files */
  614.     CStr255 fullName;                /* user's full name */
  615.     CStr255 organization;            /* user's organization */
  616.     char signature[4096];            /* user's signature */
  617.     Boolean fullGroupListVisible;    /* true if full group list window is visible */
  618.     Boolean unused2;                /* unused (used to be auto zoom windows) */
  619.     Boolean unused3;                /* unused (used to be offset winds from parent) */
  620.     Boolean unused4;                /* unused (used to be most recent first) */
  621.     Str255 mailServerName;            /* mail server name */
  622.     CStr255 emailAddress;            /* user's e-mail address */
  623.     
  624.     /*     Added in 1.2(NU) */
  625.     
  626.     char magicCookie[12];            /* magic cookie */
  627.     char versionString[12];            /* version string - used from version 1.2(NU) through
  628.                                        version 2.0d17. Empty string in version 2.0d18
  629.                                        and later versions. */
  630.     Boolean areYouSureAlert;        /* true to present are you sure alert on postings */
  631.                                    
  632.     /*    Added in 1.3d1 */
  633.     
  634.     Boolean autoFetchNewsrc;        /* auto get/put .newsrc file */
  635.     Boolean unused5;                /* unused (used to be CC self on email replies) */
  636.     
  637.     /*     Added in 1.3d4 */
  638.     
  639.     Boolean showArtHeaders;            /* true to show article headers by default */
  640.     Boolean showAuthors;            /* true to show authors in subject windows */
  641.     Boolean showThreadsCollapsed;    /* true to show threads collapsed by default */
  642.  
  643.     /* Added in 2.0d9 */
  644.     
  645.     Boolean checkForNewGroups;        /* Check for new newsgroups at startup */
  646.     Boolean unused6;                /* unused (used to be killed articles are shown 
  647.                                        but marked as read) */
  648.     unsigned long groupCheckTime;    /* The last time we checked for new groups */
  649.     char ftpNewsrcPassword[32];        /* Password for FTP transfers of newsrc files */
  650.     Boolean saveFtpNewsrcPassword;    /* True to save newsrc FTP password */
  651.     Boolean unused7;                 /* unused (used to be xpand threads with highlighted articles) */
  652.     OSType savedArtCreator;            /* Creator code for owning app of saved articles */
  653.     Str31 savedArtAppName;            /* Name of the app which owns saved articles */
  654.     Str31 DefunctSavedArtDefaultVolName;    /* Default volume to store saved articles (not used in
  655.                                        2.0d41 and later) */
  656.     long DefunctSavedArtDefaultDirID;        /* Default dir id to store saved articles (not used in
  657.                                        2.0d41 and later) */
  658.     short maxGroupNameWidth;        /* max group name width in current list font
  659.                                        and size, or 0 if needs to be recomputed */
  660.     Boolean    useXPAT;                /* use XPAT for searching if available */
  661.     
  662.     /* Added in 2.0d10 */
  663.     
  664.     Boolean savedArtDefaultFolder;    /* true if using default folder for saved articles */
  665.     char ftpNewsrcPath[32];            /* Path for FTP transfers of newsrc files */
  666.     
  667.     /* Added in 2.0d11 */
  668.     
  669.     Boolean addSigSeparatorLine;    /* true to add "-- " separator line before sig */
  670.     
  671.     /* Added in 2.0d12 */
  672.     
  673.     Boolean keypadShortcuts;        /* true if keypad shortcuts enabled */
  674.     Boolean logActionsToFile;        /* true if logging enabled */
  675.     
  676.     /* Added in 2.0d14 */
  677.     
  678.     Boolean batchedGroupCmds;        /* use batched GROUP commands */
  679.     Boolean noNewConnection;        /* don't establish new connection when checking for new articles */
  680.     Boolean noModeReader;            /* don't send MODE READER command */
  681.     
  682.     /* Added in 2.0d16 */
  683.     
  684.     Boolean reZoomWindows;            /* rezoom windows */
  685.     Boolean autoSaveOnQuit;            /* auto save on quit */
  686.     
  687.     /* Added in 2.0d18 */
  688.     
  689.     Boolean replyPost;                /* reply via posting */
  690.     Boolean replyEmail;                /* reply via email */
  691.     Boolean copySelf;                /* send copies to self */
  692.     Boolean showMsgDetails;            /* show message window details */
  693.     Boolean tabEnabled;                /* tabs enabled in message bodys */
  694.     short tabStops;                    /* tab stops */
  695.     char quoteString[11];            /* quote string */
  696.     CStr255 extraNewsHdrLines;        /* extra news header lines */
  697.     CStr255 extraMailHdrLines;        /* extra mail header lines */
  698.     
  699.     /* Added in 2.0d19 */
  700.     
  701.     unsigned long version;            /* version number of NewsWatcher which created this
  702.                                        prefs file, in 'vers' resource format */
  703.     Boolean addSigBlankLine;        /* add blank line before signature */
  704.     
  705.     /* Added in 2.0d21 */
  706.     
  707.     Point prefsLoc;                    /* location of preferences dialog */
  708.     Point unused8;                    /* unused (used to be location of about box dialog) */
  709.     Point hostLoc;                    /* location of remote host dialog */
  710.     Point servErrLoc;                /* location of news server error dialog */
  711.     Point searchLoc;                /* location of search dialog */
  712.     Point unused9;                    /* unused (used to be location of server info dialog) */
  713.     Point delGroupsLoc;                /* location of deleted groups dialog */
  714.     
  715.     /* Added in 2.0d24 */
  716.     
  717.     Boolean unused10;                /* unused (used to be fetch oldest/newest option */
  718.     Boolean wrapOnSend;                /* true to wrap messages before sending them */
  719.     
  720.     /* Added in 2.0d25. These prefs fields are defunct as of 2.0b17. They are
  721.        replaced by the new ftpHelperInfo field. */
  722.     
  723.     OSType ftpHelper;                /* Creator code for FTP helper program */
  724.     Str31 ftpHelperName;            /* Name of FTP helper program */
  725.     
  726.     /* Added in 2.0d26 */
  727.     
  728.     char authUsername[32];            /* authorization username */
  729.     char authPassword[32];            /* authorization password */
  730.     Boolean authSavePassword;        /* true to save authorization password */
  731.     Boolean authAtStartup;            /* true to authorize at startup, false to
  732.                                        authorize only when requested */
  733.     Point authLoc;                    /* location of authorization dialog */
  734.     
  735.     /* Added in 2.0d27 */
  736.     
  737.     Boolean authPrivateGroups;        /* true if private groups */
  738.     
  739.     /* Added in 2.0d39 */
  740.     
  741.     Boolean unused11;                /* unused (used to be saved article auto save option) */
  742.     
  743.     /* Added in 2.0d41 */
  744.     
  745.     Boolean savedMsgDefaultFolder;            /* true if using default folder for 
  746.                                                saved messages */
  747.     AliasHandle savedMsgDefaultFolderAlias;    /* reserved for handle to default 
  748.                                                saved message folder alias */
  749.     Boolean unused12;                        /* unused (used to be saved msg auto save option */
  750.     Boolean savedMsgDelAfterSend;            /* true to delete saved messages after sending them */
  751.     AliasHandle savedArtDefaultFolderAlias;    /* reserved for handle to default saved article
  752.                                                folder alias */
  753.     Boolean savedBinDefaultFolder;            /* true if using default folder for saved 
  754.                                                binaries */
  755.     AliasHandle savedBinDefaultFolderAlias;    /* reserved for handle to default saved binaries
  756.                                                folder alias */
  757.     OSType hqxHelper;                        /* creator code for BinHex helper program */
  758.     Str31 hqxHelperName;                    /* name of BinHex helper program */
  759.     
  760.     /* Added in 2.0d44 */
  761.     
  762.     OSType uuHelper;                    /* creator code for uudecode helper program */
  763.     Str31 uuHelperName;                    /* name of uudecode helper program */
  764.     Boolean keyboardShortcuts;            /* main keyboard shortcuts */
  765.     
  766.     /* Added in 2.0d48 */
  767.     
  768.     Boolean reuseArticleWinds;            /* reuse article windows */
  769.     Point autoFetchNewsrcLocn;            /* saved top left auto-fetched newsrc
  770.                                            window position (defunct as of 2.0b4) */
  771.  
  772.     /* Added in 2.0b4 */
  773.     
  774.     Boolean dontCoverFinderIcons;        /* don't cover Finder icons */
  775.     Boolean saveThreadsToSeparateFiles;    /* save threads to separate files */
  776.     Boolean appendIfFileAlreadyExists;    /* append if file already exists */
  777.     Boolean saveEncodedText;            /* save encoded text */
  778.     Boolean subjectWindPosLocked;        /* true if subject window pos locked */
  779.     Rect subjectWindLocn;                /* saved locked subject window pos */
  780.     Boolean articleWindPosLocked;        /* true if article window pos locked */
  781.     Rect articleWindLocn;                /* saved locked article window pos */
  782.     TSavedWindPos fullGroupWindPos;        /* saved full group window position */
  783.     TSavedWindPos autoFetchWindPos;        /* saved autofetch window position */
  784.     
  785.     /* Added in 2.0b12 */
  786.     
  787.     Boolean returnToSubjectWindow;        /* return to subject window at end of thread */
  788.     
  789.     /* Added in 2.0b14 */
  790.     
  791.     Boolean beepAtEndOfGroup;            /* beep at end of group
  792.                                            (defunct as of 2.0b27) */
  793.     Point findLoc;                        /* location of find dialog */
  794.     
  795.     /* Added in 2.0b15 */
  796.     
  797.     Boolean startFindAtBeginning;            /* true to start Find commmands at
  798.                                                  beginning of window */
  799.     Boolean savedUGLDefaultFolder;            /* true if useing default folder for
  800.                                                  saved user group lists */
  801.     AliasHandle savedUGLDefaultFolderAlias;    /* reserved for handle to default
  802.                                                saved user group list folder alias */
  803.     Point waitForDNRLoc;                    /* location of wait for DNR dialog */
  804.     
  805.     /* Added in 2.0b17 - defunct as of 2.0b25 */
  806.     
  807.     TOldURLHelperInfo ftpHelperInfo;        /* pre-2.0b25 ftp helper program info */
  808.     TOldURLHelperInfo httpHelperInfo;        /* pre-2.0b25 http helper program info */
  809.     TOldURLHelperInfo gopherHelperInfo;        /* pre-2.0b25 gopher helper program info */
  810.     TOldURLHelperInfo waisHelperInfo;        /* pre-2.0b25 wais helper program info */
  811.     TOldURLHelperInfo telnetHelperInfo;        /* pre-2.0b25 telnet helper program info */
  812.     TOldURLHelperInfo tn3270HelperInfo;        /* pre-2.0b25 tn3270 helper program info */
  813.     TOldURLHelperInfo fingerHelperInfo;        /* pre-2.0b25 finger helper program info */
  814.     TOldURLHelperInfo whoisHelperInfo;        /* pre-2.0b25 whois helper program info */
  815.     
  816.     /* Added in 2.0b21 */
  817.     
  818.     Str255 printingFont;                /* name of printing font */
  819.     short printingSize;                    /* size of printing font */
  820.     
  821.     /* Added in 2.0b22 */
  822.     
  823.     Boolean useInternetConfig;            /* true to use Internet Config */
  824.     
  825.     /* Added in 2.0b23 */
  826.     
  827.     Boolean useWebHelperForHtmlFiles;    /* true to use web (http) helper for .html ftp URLs */
  828.     TOldURLHelperInfo phHelperInfo;        /* pre-2.0b25 ph helper program info */
  829.     
  830.     /* Added in 2.0b25 */
  831.     
  832.     Point retryConnectLoc;                /* location of retry news server connect dialog */
  833.     Boolean showLabelsUnderIcons;        /* true to show labels under 3 msg window icons */
  834.     TURLHelperInfo **urlHelpers;        /* reserved for handle to array of URL helper info,
  835.                                            terminated by an entry with schemeName = empty
  836.                                            string. */
  837.                                            
  838.     /* Added in 2.0b27 */
  839.     
  840.     Boolean stopAtEndOfSubjectList;        /* true to stop at end of subject list */
  841.     Boolean beepAtEndOfLists;            /* true to beep at end of subject and group lists */
  842.     
  843.     /* Added in 2.1b1 */
  844.     
  845.     long maxFetch;                        /* max articles to fetch */
  846.  
  847.     char fill[128];                        /* for future expansion */
  848.     
  849. } TPrefRec, *TPrefPtr;
  850. #pragma options align=reset
  851.  
  852.  
  853.  
  854. /* Global variables. */
  855.  
  856. extern TDispatch gDispatch[kNumWindowKind];        /* dispatch table */
  857.  
  858. extern long gNumGroups;                /* number of newsgroups */
  859. extern long **gGroupNameOffsets;    /* handle to array of offsets into gGroupNames */
  860. extern Handle gGroupNames;            /* handle to group name strings */
  861. extern WindowPtr gFullGroupWindow;    /* pointer to full group list window */
  862. extern Boolean gFullGroupListDirty;    /* true if full group list dirty */
  863. extern Boolean gMustDoZoomOnShowFullGroupList;    /* true if full group list needs zooming */
  864.  
  865. extern TPrefRec gPrefs;                /* preferences */
  866.  
  867. extern CStr255 gAutoFetchHost;        /* autofetch host */
  868. extern CStr255 gAutoFetchUsername;    /* autofetch username */
  869. extern char gAutoFetchPassword[32];    /* autofetch password */
  870. extern char gAutoFetchPath[32];        /* autofetch path */
  871.  
  872. extern Boolean gDone;                /* flag set true upon program termination */
  873. extern Boolean gCancel;                /* flag set when user cancels an action */
  874. extern Boolean gStartupOK;            /* true if no errors during startup */
  875. extern Boolean gStartingUp;            /* true during startup */
  876. extern Boolean gPrefsFileFoundAtStartup;    /* true if prefs file found during startup */
  877. extern Boolean gLongOperation;        /* true during long operations */
  878. extern Boolean gInDialog;            /* true while in dialog */
  879. extern Boolean gInBackground;        /* background/foreground flag */
  880. extern Boolean gAEServer;            /* true while responding to Apple event */
  881. extern DialogPtr gMyCurDialog;        /* pointer to NewsWatcher's current dialog
  882.                                        window, or nil if none */
  883. extern Rect gDesktopExtent;            /* desktop extent */
  884. extern Cursor gIBeamCurs;            /* ibeam cursor */
  885. extern Cursor gWatchCurs;            /* watch cursor */
  886.  
  887. extern Boolean gHaveDragMgr;        /* true if Drag Manager is available */
  888. extern OSErr (*gDragPostProcessor)(void);    /* pointer to drag and drop post-processing
  889.                                                function, or nil if none */
  890. extern OSErr gDragErr;                /* Drag Manager handler error code. */
  891. extern Boolean gDidDrag;            /* true if did a drag and drop */
  892.  
  893. extern EventRecord gCurEvent;        /* current event being handled */
  894. extern EventRecord gPrevEvent;        /* previous event */
  895.  
  896. extern Boolean gHaveTEOutlineHilite;    /* true if TE outline hilight feature
  897.                                            is available */
  898.                                            
  899. extern CStr255 gFindPattern;            /* pattern for Find and Find Again commands */
  900.